package org.opens.magicByte;

import com.github.misterchangray.core.annotation.MagicClass;
import com.github.misterchangray.core.annotation.MagicField;
import com.github.misterchangray.core.enums.ByteOrder;
import com.github.misterchangray.core.enums.TimestampFormatter;
import lombok.Data;

import java.util.Date;
import java.util.List;

// declare class must use public
// 使用大端模式， 默认为大端
@Data
@MagicClass(byteOrder = ByteOrder.BIG_ENDIAN)
public class School {

    // 10 byte, 普通数据类型
    @MagicField(order = 1, size = 10)
    private String name;

    // 2 byte, 长度字段, 数据序列化时将自动填充实际值
    @MagicField(order = 3, calcLength = true)
    private short length;

    // 支持组合模式, 这里嵌入了 Student 对象
    // 总字节数 = students.bytes * length
    @MagicField(order = 5, size = 2)
    private Student[] students;

    // 0 byte, 注意, 此处无法序列化, 不支持的数据类型将会被忽略
    //@MagicField(order = 7)
    //private List<Object> notSupport;

    // 0 byte, 注意, 此处无法序列化, 不支持的数据类型将会被忽略
    //@MagicField(order = 9)
    //private Object age;

    // 4 byte, 注意, 此处指定为秒级时间戳, 指定使用4个字节保存， 未指定则默认6个字节
    @MagicField(order = 13, size = 4, timestampFormat = TimestampFormatter.TO_TIMESTAMP_SECONDS)
    private Date[] birthdays;

    // 1 byte, 普通数据类型, 通过order配置序列化顺序, 序列号顺序和定义顺序无关
    @MagicField(order = 15)
    private byte age;

    // 1 byte, 校验和字段, 序列化时将会自动填充
    @MagicField(order = 17)
    private byte checkCode;

}
